package com.hspedu.single_;

import jdk.swing.interop.SwingInterOpUtils;

/**
 * 演示懒汉式单例设计模式
 */
public class SingleTon02 {
    public static void main(String[] args) {
        System.out.println(Cat.n1);
        Cat cat = Cat.getInstance(); //如果没有引用一个对象默认为null
        System.out.println(cat);
        Cat cat1 = Cat.getInstance();
        System.out.println(cat1);
        System.out.println(cat1 == cat);//true


    }
}

//希望在程序运行过程中，只能创建一个cat对象
class Cat{
    private String name;
    private static Cat cat;
    public static  int n1 = 100;
    //就算类加载了，构造器也不会调用

    //步骤
    //1.仍然构造器私有化
    //2.定义一个static静态属性对象
    //3.提供一个public的static方法，可以返回一个Cat对象
    //4.懒汉式：只有当用户使用instance这个静态方法时，才会进行对象的创建，且只会创建一次，
    //  再次被调用时，返回的是上次创建的对象，从而保证单例

    private Cat(String name) {
        System.out.println("构造器被调用~~");
        this.name = name;
    }

    public static Cat getInstance(){
        if(cat == null){
           cat = new Cat("小花");
            return cat;
        }
        return  cat;
    }

    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                '}';
    }
}
